#include <bits/stdc++.h>
using namespace std;
unordered_map<int, int> hash1;
int n, m;
/*
    1：a
    2:  b
    枚举最终分配的情况下，字数最多的人数x
    我们在保证x的前提下 保证每个数字分的组数最小，
    最优的分的办法就是a/x组，b/x组。
    最后查看此时总共分了多少组，如果大于m就错误的。因此此时的组数和是x前提下的最小的分组数，
    如果大于m一定是不满足的
    x变大 此时总的分组数一定是变小的 我们的最优答案是保证每组的人数少，也就是组数多的情况 因此答案在左边区间就是x尽可能小
*/
bool check(int x)
{
    int sum = 0; // 记录此时的最小可以分的组的个数
    for (auto &ch : hash1)
    {
        int tem = ch.second / x + (ch.second % x == 0 ? 0 : 1);
        sum += tem;
    }
    return sum <= m;
}
int main()
{

    int maxcount = 0;
    cin >> n >> m;
    for (int i = 0; i < n; i++)
    {
        int ch;
        cin >> ch;
        hash1[ch]++;
    }
    for (auto &ch : hash1)
    {
        maxcount = max(maxcount, ch.second);
    }
    if (m > n || m < hash1.size())
    {
        cout << -1 << endl;
        return 0;
    }
    if (m == n)
    {
        cout << 1 << endl;
        return 0;
    }
    // 一定可以进行分组
    // 枚举最终分配的情况，字数最多的人数x
    int left = 1, right = maxcount, ans = -1;
    while (left <= right)
    {
        int mid=(right-left)/2+left;
        if(check(mid))
        {
            ans=mid;
            right=mid-1;
        }
        else
        {
            left=mid+1;
        }
    }
    cout<<ans<<endl;

    return 0;
}